<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Java Archive</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Java_Archive"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Java_Archive rootpage-Java_Archive skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Java Archive</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p>Ein <b>Java Archive</b> (umgangssprachlich wegen der Dateiendung auch <b>JAR-Datei</b> genannt) dient der Gliederung, Verteilung und Bereitstellung von <a href="Klassenbibliothek" class="mw-redirect" title="Klassenbibliothek">Klassenbibliotheken</a> und ausführbaren Programmen, die in der Programmiersprache <a href="Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a> erstellt wurden. Technisch ist es eine komprimierte Datei im <a href="ZIP-Dateiformat" title="ZIP-Dateiformat">ZIP</a>-Format. Das Archiv enthält kompilierte Java-Klassen (<a href="Bytecode" title="Bytecode">Bytecode</a>) und ggf. weitere Ressourcen. In der Regel umfasst es auch eine oder mehrere Dateien mit <a href="Metadaten" title="Metadaten">Metadaten</a>. Diese haben fest vorgegebene Namen und Strukturen und liegen im Verzeichnis <code>META-INF</code>. Die typische Datei <code>META-INF/MANIFEST.MF</code> wird im Abschnitt <a href="#Manifest">Manifest</a> genauer beschrieben. Die Kurzbezeichnung des Archivs kann als Wortspiel mit dem englischen Wort <i>jar</i> (deutsch: „Gefäß“) verstanden werden.
</p>
<div class="mw-heading mw-heading2"><h2 id="Verwendung">Verwendung</h2></div>
<p>JAR-Dateien wurden ursprünglich eingeführt, damit von <a href="Java-Applet" title="Java-Applet">Java-Applets</a> benötigte Java-Klassen nicht einzeln aus dem Netz nachgeladen werden müssen. Die Übertragung vieler Klassen in einer Datei ist effizienter, und zusätzlich können die Dateien <a href="Datenkompression" title="Datenkompression">komprimiert</a> werden.
</p><p>Durch die „Manifest“-Datei kann festgelegt werden, wie die Java-Anwendung gestartet wird. Damit kann auch unter <a href="Grafische_Benutzeroberfl%C3%A4che" title="Grafische Benutzeroberfläche">grafischen Benutzeroberflächen</a>, wie <a href="Microsoft_Windows" title="Microsoft Windows">Windows</a>, <a href="MacOS" title="MacOS">macOS</a> oder <a href="KDE" title="KDE">KDE</a>, die Anwendung ohne Zuhilfenahme der Kommandozeile gestartet werden (vorausgesetzt, der Dateiendung <code>.jar</code> wurde der entsprechende Befehl zugewiesen). Mit <code>java -jar</code> kann man JAR-Dateien aus der <a href="Kommandozeile" title="Kommandozeile">Kommandozeile</a> starten. JAR-Archive speichern Dateinamen intern UTF-8-kodiert, sodass sie auch Umlaute enthalten dürfen. Voraussetzung für das Ausführen von JARs bzw. Java-Programmen ist immer ein installiertes <a href="Java_Runtime_Environment" class="mw-redirect" title="Java Runtime Environment">Java Runtime Environment</a>.
</p><p>JAR-Dateien können mit dem <i>jar</i>-Befehl des <a href="Java_Development_Kit" title="Java Development Kit">JDK</a> (der die Syntax von <a href="Tar_(Packprogramm)" title="Tar (Packprogramm)">tar</a> benutzt) oder, sofern die Dateinamen nur ASCII-Zeichen enthalten, mit jedem ZIP-Programm erstellt werden. Außerdem bietet die <a href="Java_Platform%2C_Standard_Edition" title="Java Platform, Standard Edition">Java Platform, Standard Edition</a> in den beiden Paketen „java.util.jar“ und „java.util.zip“ <a href="Klasse_(Objektorientierung)" title="Klasse (Objektorientierung)">Klassen</a> an, um JAR- oder ZIP-Archive auszulesen oder zu erstellen.
</p><p>Zum Beispiel zeigt der folgende Befehl den Inhalt einer JAR-Datei namens <span style="font-family:monospace;">test.jar</span> an.
</p>
<pre>jar tvf test.jar
</pre>
<p>Dabei steht der Buchstabe <span style="font-family:monospace;">t</span> für „Inhaltsverzeichnis anzeigen“ (von englisch <i><b>t</b>able of contents</i>), <span style="font-family:monospace;">v</span> für ausführliche Ausgabe (von englisch <i><b>v</b>erbose</i>) und <span style="font-family:monospace;">f</span> besagt, dass aus einer Datei (englisch <i><b>f</b>ile</i>) gelesen werden soll, deren Name folgt.
</p>
<div class="mw-heading mw-heading2"><h2 id="Manifest">Manifest</h2></div>
<p>Jedes Java Archive kann im Verzeichnis „META-INF“ durch eine Datei namens „MANIFEST.MF“ verschiedene Informationen über den Inhalt des Archivs bereitstellen. Zu den wichtigsten Meta-Informationen zählen
</p>
<ul><li>die zur <a href="Laufzeit_(Informatik)" title="Laufzeit (Informatik)">Laufzeit</a> ermittelbare Version enthaltener <a href="Klassenbibliothek" class="mw-redirect" title="Klassenbibliothek">Klassenbibliotheken</a>,</li>
<li>Informationen über enthaltene <a href="JavaBeans" title="JavaBeans">JavaBeans</a> und</li>
<li>der Name der Hauptklasse einer enthaltenen <a href="Java-Anwendung" title="Java-Anwendung">Java-Anwendung</a>.</li></ul>
<p>Diese Manifest-Datei ist eine einfache zeilenorientierte <a href="Textdatei" title="Textdatei">Textdatei</a>, die mehrere Paare aus Namen und Werten enthält, deren jedes ein sogenanntes Attribut definiert. Ein Attribut ist eine Eigenschaft der gesamten Anwendung, der enthaltenen Klassenbibliothek oder auch nur eines einzelnen <a href="Java-Syntax#Pakete,_Namen,_Klassen,_Schnittstellen" title="Java-Syntax">Java-Pakets</a> (<i>package</i>) oder einer einzelnen <a href="Klasse_(Objektorientierung)" title="Klasse (Objektorientierung)">Klasse</a>. Zusätzlich ist sie in mehrere Abschnitte (<i>sections</i>) aufgeteilt.
</p><p>Der erste Abschnitt heißt <i>main section</i> (Hauptabschnitt) und definiert Attribute, die sich auf das gesamte Java Archive beziehen. Er beginnt immer mit der Definition des Attributs „Manifest-Version“, während die übrigen Attribute optional sind. Die folgenden Abschnitte beziehen sich jeweils auf ein einzelnes Paket oder eine Klasse und sind optional ebenso wie die darin enthaltenen Attribute. Unbekannte Attribute werden ignoriert und führen nicht zu Fehlermeldungen. Wird ein Attribut sowohl im Hauptabschnitt als auch in einem Einzelabschnitt definiert, so überlagert der im Einzelabschnitt definierte Wert den im Hauptabschnitt vorbelegten für diejenige Komponente (Paket oder Klasse), auf die sich der Abschnitt bezieht.
</p>
<div class="mw-heading mw-heading3"><h3 id="Beispiel">Beispiel</h3></div>
<p>Das folgende Beispiel zeigt einen Ausschnitt des Manifests der in der Laufzeitumgebung von Java 1.4 enthaltenen Datei „rt.jar“.
</p>
<pre>Manifest-Version: 1.0
Specification-Title: Java Platform API Specification
Created-By: 1.4.2_05 (Sun Microsystems Inc.)
Implementation-Title: Java Runtime Environment
Specification-Vendor: Sun Microsystems, Inc.
Specification-Version: 1.4
Implementation-Version: 1.4.2_05
Implementation-Vendor: Sun Microsystems, Inc.
</pre>
<pre>Name: javax/swing/JRadioButtonMenuItem.class
Java-Bean: True
</pre>
<pre>Name: javax/swing/JList.class
Java-Bean: True
</pre>
<p>Dem Hauptabschnitt in diesem Beispiel lässt sich entnehmen, dass dieses Manifest so aufgebaut ist, wie in (der bisher einzigen) Version 1 der JAR-Datei-Spezifikation von Sun Microsystems beschrieben. Die übrigen Attribute dieses Hauptabschnitts liefern Informationen über die von der Bibliothek erfüllte <a href="Spezifikation" title="Spezifikation">Spezifikation</a>, den Erzeuger des Java Archives, den Namen der Implementierung, sowie Hersteller und Version der verwendeten Spezifikation und der enthaltenen Implementierung. Die beiden folgenden Abschnitte des Beispiels beziehen sich jeweils auf eine Klasse, die als <a href="JavaBeans" title="JavaBeans">JavaBean</a> markiert wird.
</p>
<div class="mw-heading mw-heading2"><h2 id="Abgeleitete_Formate">Abgeleitete Formate</h2></div>
<p>Weitere Spezialisierungen des JAR-Formats sind zum Beispiel <a href="Web_Application_Archive" title="Web Application Archive">WAR-Dateien</a> (<i>Web Application Archive</i>), EAR-Dateien (<i><a href="Enterprise_Application_Archive" class="mw-redirect" title="Enterprise Application Archive">Enterprise Application Archive</a></i>) oder <a href="OpenDocument" title="OpenDocument">OpenDocument</a>-Dateien.
</p>
<div class="mw-heading mw-heading2"><h2 id="Hilfsprogramme">Hilfsprogramme</h2></div>
<p>Das <a href="Java_Development_Kit" title="Java Development Kit">Java Development Kit</a> enthält bzw. enthielt mehrere Programme zur Manipulation von JAR-Dateien:
</p>
<dl><dt>jar</dt>
<dd><i><a href="Java_Development_Kit#jar" title="Java Development Kit">jar</a></i> ist ein Programm zum Erzeugen, Modifizieren und Entpacken von JAR-Dateien, dessen Aufrufparameter denjenigen des bekannten Unix-Programms <a href="Tar_(Packprogramm)" title="Tar (Packprogramm)">tar</a> ähneln.</dd>
<dt>jarsigner</dt>
<dd><i>jarsigner</i> ist ein Programm, das JAR-Dateien <a href="Elektronische_Unterschrift" class="mw-redirect" title="Elektronische Unterschrift">signiert</a> und deren elektronische Signatur überprüft.</dd>
<dt>pack200</dt>
<dd><i>pack200</i> wandelte JAR-Dateien in ein Dateiformat um, das Bytecode effizienter speichern kann. Es wurde in Java 5 eingeführt und kam insbesondere bei <a href="Java_Web_Start" title="Java Web Start">Java Web Start</a> zum Einsatz, da hier unter Umständen größere Dateimengen über das <a href="Internet" title="Internet">Internet</a> übertragen werden mussten. Die Rückwandlung erfolgte mit dem Programm <i>unpack200</i>. Java 13 war die letzte Version, die pack200 und unpack200 enthielt.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup></dd></dl>
<p>Nicht im JDK enthaltene Programmierwerkzeuge für JAR-Dateien:
</p>
<dl><dt>ProGuard</dt>
<dd><a href="ProGuard" title="ProGuard">ProGuard</a> ist ein Programm zum Komprimieren, Optimieren und <a href="Obfuskation_(Software)" title="Obfuskation (Software)">Verschleiern</a> von JAR-Dateien. Dies wird durch eine genauere Analyse des <a href="Bytecode" title="Bytecode">Bytecodes</a> erreicht.</dd>
<dt>Packer</dt>
<dd>Sofern die Dateinamen im Archiv aus <a href="American_Standard_Code_for_Information_Interchange" title="American Standard Code for Information Interchange">ASCII</a>-Zeichen bestehen, lassen sich JAR-Dateien mit jedem Software-Werkzeug bearbeiten, das auch <a href="ZIP-Dateiformat" title="ZIP-Dateiformat">ZIP</a>-Dateien bearbeiten kann. Einige Beispiele sind in der <a href="Liste_von_Datenkompressionsprogrammen" title="Liste von Datenkompressionsprogrammen">Liste von Datenkompressionsprogrammen</a> aufgeführt.</dd></dl>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://openjdk.org/jeps/367"><i>JEP 367: Remove the Pack200 Tools and API.</i></a> <a href="Oracle" title="Oracle">Oracle</a>,<span class="Abrufdatum"> abgerufen am 2. Juli 2023</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+Archive&rft.title=JEP+367%3A+Remove+the+Pack200+Tools+and+API&rft.description=JEP+367%3A+Remove+the+Pack200+Tools+and+API&rft.identifier=https%3A%2F%2Fopenjdk.org%2Fjeps%2F367&rft.publisher=%5B%5BOracle%5D%5D&rft.language=en"> </span></span>
</li>
</ol>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/6/docs/technotes/guides/jar/jar.html">JAR-Spezifikation für J2SE 1.5.0</a> (englisch)</li>
<li><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/tutorial/deployment/jar/index.html">Lesson: Packaging Programs in JAR Files</a> (englisch)</li>
<li><span class="cite">Christian Ullenboom: <a rel="nofollow" class="external text" href="https://openbook.rheinwerk-verlag.de/javainsel/24_005.html"><i>Das Archivformat Jar.</i></a> Abschnitt 24.5. <a href="Rheinwerk_Verlag" title="Rheinwerk Verlag">Rheinwerk Verlag</a>, 2024<span style="display:none">;</span><span class="Abrufdatum" style="display:none"> abgerufen am 13. November 2024</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava+Archive&rft.title=Das+Archivformat+Jar&rft.description=Das+Archivformat+Jar&rft.identifier=https%3A%2F%2Fopenbook.rheinwerk-verlag.de%2Fjavainsel%2F24_005.html&rft.creator=Christian+Ullenboom&rft.publisher=%5B%5BRheinwerk+Verlag%5D%5D&rft.date=2024"> </span></li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-01-18" href="https://de.wikipedia.org/wiki/?title=Java_Archive&oldid=252388829">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>